// var、let 和 const 区别的实现原理是什么

// var 和 let 用以声明变量，const 用于声明只读的常量；
// var 声明的变量，不存在块级作用域，在全局范围内都有效，let 和 const 声明的，只在它所在的代码块内有效；
// let 和 const 不存在像 var 那样的 “变量提升” 现象，
// 所以 var 定义变量可以先使用，后声明，而 let 和 const 只可先声明，后使用；

// let 不允许在相同作用域内，重复声明同一个变量；

// const 在声明时必须初始化赋值，一旦声明，其声明的值就不允许改变，更不允许重复声明；

// var会直接在栈里分配一个内存空间，等实际执行到语句时，再保存变量。如果遇到引用类型的变量，会去堆里开辟一个空间来保存对象，然后在栈里存储指向对象的指针。
// let不会直接去栈里分配内存空间，而是做一个预检查，如果有同名变量就会报错。
// const和let一样在分配内容空间之前会做检查。
